package com.mbengue.corp.artisan.vue.tableau;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import com.mbengue.corp.artisan.modele.Article;
import com.mbengue.corp.artisan.utils.Outil;

public class Feuille extends JTable {
  private static final long serialVersionUID = -8355776009474645895L;
  private int nbLigne = 0;
  private Map<String, Object[]> donnees;

  public Feuille(String name) {
    super();
    this.setName(name);

    this.initFeuille();
    this.setVisible(true);
  }

  private void initFeuille() {
    this.donnees = new HashMap<String, Object[]>();
    TableModel modele = new DefaultTableModel(Outil.EN_TETE_ARTICLE, this.nbLigne);
    this.setModel(modele);
  }

  public void rechargerFeuille() {
    TableModel modele = new DefaultTableModel(Outil.EN_TETE_ARTICLE, this.nbLigne);

    Set<String> codes = this.donnees.keySet();
    int ligne = 0;
    for (String code : codes) {
      for (int col = 0; col < Outil.EN_TETE_ARTICLE.length; col++) {
        Object valeur = this.donnees.get(code)[col];
        modele.setValueAt(valeur, ligne, col);
      }
      ligne++;
    }
    this.setModel(modele);
    this.centrerTexte();
    this.setVisible(true);
  }

  public static int getNbcolonne() {
    return Outil.EN_TETE_ARTICLE.length;
  }

  public int getNbLigne() {
    return nbLigne;
  }

  public void setNbLigne(int nbLigne) {
    this.nbLigne = nbLigne;
  }

  public Map<String, Object[]> getDonnees() {
    return donnees;
  }

  public void setDonnees(Map<String, Object[]> donnees) {
    this.donnees = donnees;
    this.nbLigne = this.donnees.size();
  }

  public void ajouterDonnee(String code, Object[] donnee) {
    this.donnees.put(code, donnee);
    this.nbLigne++;
  }

  public Object[] recupererDonnee(String code) {
    return this.donnees.get(code);
  }

  public void ajouterDonnees(List<Article> arts) {
    if (arts == null) {
      return;
    }

    for (Article article : arts) {
      this.donnees.put(article.getCode(), article.toArray());
      this.nbLigne++;
    }
  }

  private void centrerTexte() {
    DefaultTableCellRenderer custom = new DefaultTableCellRenderer();
    custom.setHorizontalAlignment(SwingConstants.CENTER);
    for (int i = 0; i < this.getColumnCount(); i++) {
      this.getColumnModel().getColumn(i).setCellRenderer(custom);
    }
  }
}
